ソフトウェア品質を高める開発者テスト アジャイル時代の実践的・効率的なテストのやり方
https://images-na.ssl-images-amazon.com/images/I/51otD7Z3BEL._SX350_BO1,204,203,200_.jpg
本書は上流テストについて
テスト担当者が実施するシステムテストの説明は省く
感想 nobuoka.icon
結構主観的な記述が多かったり、適当な記述もあったり、日本語がおかしかったりもするが、大筋いいことが書いてある
大体知っていることではあったけど、一部知らない情報などもあったりして自分としても学ぶことはあった
テストピラミッドの概念をわかっていなかったり、自動の単体テストをしっかり書くべきだということを経験的にわかってない人にとっては、ページ数が少ない中に重要な情報が詰まっていて、一読の価値はありそう 内容メモ
1 章 : はじめに
本書の目的
楽をすること
2 章 : 上流品質向上のためのテスト
あらゆるフェーズの検査を最後のテストフェーズで行おうとするとカオスになる
上流品質担保のための提案
要求仕様の明確化
クラスや関数の構造をシンプルに保つ
単体・結合テストの実行
レビューの実施
統合テストやシステムテストで見つかるバグの割合は、多くても 55 %
上流テストをしろ!!!
下流でのテストではバグを見逃す可能性が高くなる
バグの発見が遅れるとその分修正コストがかかる
3 章 : 開発者テストの基本の基本
単体テストをやっている現場でも、自動化されてないしテストケースも管理されていないことがある
そのようなところは設計書もろくにない
重厚な設計所は不要だが、クラス図とシーケンス図は書け!!
クラス図はクラスが大きくなるのを防げるし、リファクタリングの効果も見える
単体テストをするために知っておくべきテスト手法
4 章 : コードベースの単体テスト
網羅することが目的にならないように
網羅率はあくまでテストの品質基準のひとつ
網羅率についての基準
80 % 程度は目指すべき (エラーハンドリングなどもあるので、20 % 程度は頑張ってテストしなくても良いことが多い)
Google の基準
低いコードカバレッジは、プロダクトの大きな領域が完全にはテストされていないことを保証する
高いカバレッジだからといって、高い品質を保証するわけではない
変更頻度の高いコードはカバーされるべき
5 章 : 単体テストの効率化 ― 楽勝単体テスト
C = e - n + 2 (e : ルートの数、n : 分岐点の数) ← McCabe 数 バグが出やすい箇所 : 直近変更された回数の多いファイル
プログラムの構造などではない
nobuoka.icon なるほど
Hotspot : バグの出やすさを数値化したもの
Score = ∑_(i=0)^n (1 / (1+e-12ti +12))
nobuoka.icon 変数の定義を教えてくれ……
Hotspot の高い箇所は網羅するようにして、あとは全網羅は目指さなくてよい
6 章 : 機能単位の単体テスト
コードを網羅して単機能のテストをするのは開発者の責務 → 機能単位の単体テストは開発者が確認すべき
機能単位の単体テストの基本
単機能境界値
組み合わせ : そこでバグが出やすいか、という考え方で組み合わせを考える (さもなければテストケース数が爆発する)
機能単位の単体テストで組み合わせのバグ検出をするのは困難
コードベースの単体テストやコードレビューで検出すべき
にも関わらず、日本では組み合わせテストに頼り切っていたりする
なぜなら品質問題が出たときの対応としてそれが楽だから (問題が発覚 → テストで検知できていなかった → 組み合わせをテストケースに追加しよう、という流れ)
7 章 : リファクタリング
リファクタリングの 2 つの流れ
MeCabe 20 以下、WMC 20 以下
明確な根拠はない
コードの複雑度を測る指標はいくつかある
メトリクスの値が大きいファイルは小さく分割する
MVC 分離は重要
テストの界面を GUI に持たないことが重要
8 章 : コードレビュー
コードレビューはテストよりも効率的にバグを発見できる
9 章 : 統合テスト
GUI 部分と GUI から使われる API 部分にアプリケーションを分割し、API 部分をテストする、という形で統合テストをする例
10 章 : システムテストの自動化
テストの自動化では、メンテナンスコストを最小限に抑えることが重要
2 つの属性を効率的に使う
アクションワード
データ
例 : 「ログイン」 というアクションと、ユーザー名・パスワードのデータ
11 章 : 探索的テスト
筆者の考えでは、下記の条件を満たせばシステムテスト工程は短い探索的テストで良い
コード網羅が概ね 80 % 以上 (網羅基準は分岐網羅)
アーキテクチャが MVC 分離されている
全ての要求仕様がレビューされている
12 章 : まとめ - テスト全体のデザイン
日本ではシステムテストで品質担保をする組織が多いが、単体テストをちゃんとやれ 13 章 : 品質と要求仕様とテストのケース
ソフトウェア開発において、要求仕様・要求分析は超重要
日本では要求仕様について定義なしに大規模プロジェクトを遂行しているような組織が多すぎる 要件が不明確だと不具合密度が上がっていることは証明されている 14 章 : アジャイル開発 versus ウォーターフォール開発
が、日本の組織はまだかなりの部分がアジャイルに移行していないように見える
外見だけアジャイルっぽくしているエセアジャイルも多い
品質を軽視するのはエセアジャイル
リリース前に協力会社のテスト担当者にやらせるようなものはエセアジャイルである
15 章 : 開発者テストの実サンプル
Android アプリのプロジェクトをサンプルに、JaCoCo でテストカバレッジを取ったり CircleCI で CI を回すような例を説明 推奨する参考文献